class: inverse,left, middle background-image: url(data:image/png;base64,#background.png) background-size: cover <img src="data:image/png;base64,#LOGO_DIPLOMADO.png" width="500px"/> ##Módulo 1: Manipulación de datos y geoprocesos en R ### Introducción a R MatÃas Olea <br> <a href="https://orcid.org/0000-0003-0194-7784"> ORCID </a><br> matias.olea@pucv.cl</a><br> .large[<b><a href="https://www.pucv.cl/uuaa/site/edic/base/port/labgrs.html">LabGRS</a> | Agosto 2024</b>] <br> --- class: center,middle background-image: url(data:image/png;base64,#labgrs_logo.png) background-size: 35% --- ## Contenidos .pull-left[ 1) Que es R. 2) Los elementos esenciales de R: Script, objetos, funciones y paquetes. 3) La apertura y manipulación de datos alfanuméricos y numéricos. 4) La creación de funciones y ciclos. ] .pull-right[ <img src="data:image/png;base64,#https://raw.githubusercontent.com/allisonhorst/stats-illustrations/main/rstats-artwork/r_rollercoaster.png" width="650px"/> ] --- ## Introducción a R ### ¿Qué es R? -- - R es un lenguaje y entorno para la computación estadÃstica y gráficos. Es un proyecto GNU*. R proporciona una amplia variedad de estadÃsticos (como modelos lineales y no lineales, test, analisis de series de tiempo, clasificaciones, clustering, etc.) y técnicas gráficas. -- - Una de las grandes ventajas de R es la facilidad con la que se pueden producir diagramas bien diseñados con la calidad de publicación, que incluyen sÃmbolos matemáticos y fórmulas dónde sea necesario. .footnote[ <span style="font-size:9pt"> * GNU es un sistema operativo gratuito <br> Fuente: r-project.org </span> ] --- ## R <center><img src="data:image/png;base64,#R-project.png" height="80%" /></center> --- ### El entorno de R R es una interfaz integrada para manipulación de datos que incluye: -- - Un efectivo manejo de datos y facilidades de almacenamiento. -- - Una interfaz de operación para cálculos en colecciones de datos, especialmente matrices. -- - Una gran, coherente e integrada colección de herramientas para el análisis. -- - Facilidades gráficas para análisis de datos y visualización de ellos, y -- - Un desarrollado, simple y efectivo lenguaje de programación que incluyen condicionales, ciclos, funciones recursivas diseñadas o definidas por los usuarios, y más. .footnote[ <span style="font-size:9pt"> Fuente: r-project.org </span> ] --- ### ¿Qué es R? -- - R es un software de **libre acceso** (gratuito y abierto) para el análisis estadÃstico. -- - Es un pseudo-lenguaje de programación orientado a **''objetos''** -- - Hoy en dÃa, R no es solo una herramienta de análisis estadÃstico. Gracias a su potencialidad se ha transformado en una herramienta para analizar imágenes satelitales, datos del océano, variables biogeográficas, muestras dendro-cronológicas, cambio climático, etc… incluso se pueden hacer mapas. --- ### ¿Qué significa orientado a **objetos**? -- .pull-left[ Significa que si nosotros queremos aplicar una operación (función) podemos aplicárselo a un **"algo"** dentro del entorno de R, y ese "algo" va a ser un **"contenedor"** dónde almacenaremos variables o datos, como por ejemplo números, palabras, vectores, tablas, etc., en nuestro entorno de R. De esta forma, dependiendo que elemento contegamos es nuestro objeto, se definirá la **clase** o tipo del objeto. ] -- .pull-right[ <img src="data:image/png;base64,#Objeto_de_R.png" width="400px" align = "center"/> ] --- ### Creación de un objeto de R -- Para crear un objeto primero debemos definir un **nombre** que debe ser alfabético o alfanumérico. Se recomienda asignarle un nombre <b>intuitivo</b> y <b>fácil</b> de entender en la lógica de lo que queremos trabajar. Por ejemplo si crearemos o cargaremos una tabla, un nombre no intuitivo serÃa <b>t1</b>, y uno intuitivo serÃa <b>tabla_1</b>. De todas manera debe ser algo que le acomode al creador del código, pero se aconseja siempre ser "ordenados" en la creación del código. -- Definido el nombre debemos indicarle una dirección a través del sÃmbolo **<-** seguido de lo que asignaremos en el objeto, como se ve aquÃ: -- ``` r objeto_1 <- 25 objeto_2 <- "Enero" ``` En el ejemplo anterior, primero en el primer objeto llamado **objeto_1** asignamos el valor <b>25</b>, y el segundo, **objeto_2** asignamos la palabra <b>Enero</b>. --- ### Creación de un objeto de R Debemos considerar que los caracteres deben ir entre comillas, sino R los reconoce como objetos de R. -- ``` r objeto_2 <- Enero ```  --- ### Tipos de objetos en R Existen varias **"clases"** (o tipos) de objetos. Y va a depender de lo que "almacenemos" dentro: -- .left-column[ <center><img src="data:image/png;base64,#Objeto_vector.png" height="400px" /></center> ] .right-column[ - **Vector**: secuencia de valores, o valores únicos de tipo numéricos (enteros, dobles/decimales), lógicos, complejos y de caracteres. - **Factor**: Es una variable de tipo categórica que indican ordinalidad, nombres o clases. ] --- ### Tipos de objetos en R Existen varias **"clases"** (o tipos) de objetos. Y va a depender de lo que "almacenemos" dentro: .left-column[ <center><img src="data:image/png;base64,#DF_MX2.png" height="400px" /></center> ] .right-column[ - **Matrices**: estructura bidimensional formada filas y columnas. Pueden ser pensadas similar a que son vetores donde cada vector es una unica fila o columna. Se requiere que todos los elementos dentro de la matriz sean de un mismo tipo: numerico, caracter o factor. - **Data Frame**: tambien es una estructura bidemensional formada por lineas/filas (observaciones) y columnas (variables). Dentro de su estructura, las columnas pueden ser vectores numéricos, de caracteres o factores. Puede almacenar distintos tipos por columnas. Una caracterÃstica distintiva es que almacena "headers" que nombran la variable, pero este forma, y no forma, parte de los datos en si mismo. Las matrices no almacen headers pero si podemos indicarle nombre a cada columna y fila. ] --- ### Tipos de objetos en R Existen varias **"clases"** (o tipos) de objetos. Y va a depender de lo que "almacenemos" dentro: .left-column[ <center><img src="data:image/png;base64,#Objeto_lista.png" height="400px" /></center> ] .right-column[ - **Lista**: Es una compilación de datos enlistados ] --- ### Tipos de objetos en R Existen varias **"clases"** (o tipos) de objetos. Y va a depender de lo que "almacenemos" dentro: .left-column[ <center><img src="data:image/png;base64,#Objeto_lista2.png" height="400px" /></center> ] .right-column[ - **Lista**: Es una compilación de datos enlistados, pueden ser de varias clases. ] --- ### Elementos de R Ya conociendo que son los objetos de R, debemos considerar los siguientes elementos: -- **Funciones**: Son operaciones o aplicaciones que se le aplican a un conjunto de elementos o a un objeto de R. Los podemos reconocer debido a que se escriben seguido de un parentesis: ``` r nombre_funcion(...) ``` -- **Argumentos**: Cada función contiene un cierto número de argumentos o parámetros que permiten que la función sea aplicada. Un argumento puede ser el objeto al que se le aplicará, o alguna indicación extra, como por ejemplo el no considerar valores vacÃos o sin dato: ``` r nombre_funcion(argumento1, argumento2, ...) ``` Cuando una función cuanta con más de un argumento, estos se indican de forma separada por coma (<b>,</b>) --- ### Elementos de R **Paquetes**: Un paquete en R es una colección de funciones y/o datos, la cual el autor ha dedicido que esté disponible para su uso, y luego de pasar por algunos test especÃficos, puede incorporarse al CRAN de R. Una vez el paquete esté disponible en el CRAN facilmente se puede instalar en nuestro R (en nuestros computadores) con la siguiente función: ``` r install.packages("Nombre_del_paquete") # debe indicarse entre comillas. ``` una vez instalado el paquete, y si deseamos incorporarlo y utilizarlo en nuestro código, lo llamamos (activamos) con la siguiente función: ``` r librar(Nombre_del_paquete) # debe indicarse sin comillas ``` --- <center><img src="data:image/png;base64,#RStudio.png" height="80%" /></center> --- ### Aplicando conceptos -- Creando objetos con la función concatenar **c()** de R base. -- ``` r constelaciones <- c("Pegasus", "Cetus", "Hydra", "Equuleus") abreviaturas <- c("Peg", "Cet", "Hya", "Equ") numeros <- c(177,189,238,16) secuencia <- c(1:50) ``` -- Consultamos su clase usando la función **class()** -- ``` r class(constelaciones) ``` ``` ## [1] "character" ``` ``` r class(numeros) ``` ``` ## [1] "numeric" ``` ``` r class(secuencia) ``` ``` ## [1] "integer" ``` --- ### Funciones más comunes ``` r mean() # Promedio median() # Mediana sd() # Desviación estandar sum() # Sumatorias exp() # Exponenciales sqrt() # Raiz cuadrada abs() # valores absolutos pi # para el número Pi ``` -- ``` r mean(c(50,70,98,68)) ``` ``` ## [1] 71.5 ``` -- ``` r objeto_numeros <- c(50,70,98,68) sum(objeto_numeros) ``` ``` ## [1] 286 ``` --- ### Funciones más comunes #### Argumentos de una función -- ``` r ??seq() ``` -- ``` r ## from = inicio ## to = final ## by = intervalo ``` -- ``` r seq(from=2, to=50, by=3) ``` ``` ## [1] 2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 ``` --- ### Operadores lógicos Ocupamos operadores lógicos cuando queremos expresar si una afirmación es verdadera (**TRUE** ó **T**) o falsa (**FALSE** ó **F**). -- - Para decir una negación, o que algo es diferente a ..., usamos el signo de cierre exclamación antes **!** -- <b>Ej. 1:</b> ¿El vector constelaciones es clase númerico? -- ``` r is.numeric(constelaciones) ``` ``` ## [1] FALSE ``` -- <b>Ej. 2:</b> ¿El vector constelaciones es diferente a clase númerico? -- ``` r !is.numeric(constelaciones) ``` ``` ## [1] TRUE ``` --- ### Operadores lógicos Ocupamos operadores lógicos cuando queremos expresar si una afirmación es verdadera (**TRUE** ó **T**) o falsa (**FALSE** ó **F**). - Para referirnos a una condicion "x" **ó** "y", usamos **|** -- <b>Ej. 3:</b> ¿Es el vector secuencia ó el vector constelaciones de clase númerico? (¿es alguno numérico?) -- ``` r is.numeric(secuencia) | is.numeric(constelaciones) ``` ``` ## [1] TRUE ``` -- - Para referirnos a una condición "x" **y** "y", usamos **&** -- <b>Ej. 4:</b> ¿Son el vector secuencia y el vector constelaciones de clase númerico? (¿son ambos numérico?) -- ``` r is.numeric(secuencia) & is.numeric(constelaciones) ``` ``` ## [1] FALSE ``` --- ### Operadores de relaciones Ocupamos operadores de relaciones cuando queremos establecer desigualdades dentro de nuestro conjunto de datos: -- - Menor o mayor que **<**, **>**. -- - Menor o igual, mayor o igual que **=<**, **>=**. -- - Igual a **==** -- - Diferente a **!=** --- ### Operadores de relaciones #### Algunos ejemplos ``` r set.seed(100) # Esto garantiza que dentro de la aleatoriedad, # todos tengamos el mismo resultado simulado. aleatorios <- rnorm(n = 10, mean = 50, sd = 10) print(aleatorios) ``` ``` ## [1] 44.97808 51.31531 49.21083 58.86785 51.16971 53.18630 44.18209 57.14533 ## [9] 41.74741 46.40138 ``` -- ``` r aleatorios > 50 ``` ``` ## [1] FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE FALSE FALSE ``` --- ### Operadores de relaciones #### Algunos ejemplos ``` r which(aleatorios > 50) ``` ``` ## [1] 2 4 5 6 8 ``` -- ``` r which(aleatorios < 45) ``` ``` ## [1] 1 7 9 ``` --- ### Creando una pequeña base de datos estilo tabla ``` r set.seed(100) # Esto garantiza que dentro de la aleatoriedad, # todos tengamos el mismo resultado simulado. vpm1 <- rnorm(n = 100, mean = 80, sd = 5) vpm2 <- rnorm(n = 100, mean = 75, sd = 10) vpm3 <- rnorm(n = 100, mean = 60, sd = 25) tabla <- data.frame(vpm1, vpm2, vpm3) ``` --- ### Creando una pequeña tabla ``` r view(tabla) ```
--- ### Creando una pequeña tabla Ahora si nos fijamos, nuestros valores aleatorios se generan con "n" cantidad de decimales, más de los que necesitamos, por lo que tenemos algunas opciones para limitarlos con la funciones: -- ``` r # debemos indicar el valor o vector, y el número de decimales. Aproxima el último valor. round(x = 77.5492, digits = 2) ``` ``` ## [1] 77.55 ``` ``` r # debemos indicar el valor o vector, y el número de dÃgitos. Aproxima el último valor. signif(77.5492, 4) ``` ``` ## [1] 77.55 ``` --- ### Creando una pequeña tabla Ahora si nos fijamos, nuestros valores aleatorios se generan con "n" cantidad de decimales, más de los que necesitamos, por lo que tenemos algunas opciones para limitarlos con la funciones: -- ``` r # redondea al entero próximo sin aproximar. floor(77.5492) ``` ``` ## [1] 77 ``` ``` r # nos permite cortar decimales sin apróximar, dincando el valor o vector, # multiplicarlo por una potencia de 10 (dependiendo de cuantos decimales queremos) # y dividirlo por la misma potencia. trunc(77.5492 * 100) / 100 ``` ``` ## [1] 77.54 ``` --- ### Creando una pequeña tabla Sabiendo ello, tenemos 2 alternativas: a) Alojando una función dentro de otra. ``` r set.seed(100) round(rnorm(n = 10, mean = 80, sd = 5), digits = 2) ``` ``` ## [1] 77.49 80.66 79.61 84.43 80.58 81.59 77.09 83.57 75.87 78.20 ``` b) Encadenando procesos y la librerÃa **magrittr** que veremos en detalles en la siguiente unidad. --- ### Creando una pequeña tabla ``` r tabla_round <- round(tabla, 2) view(tabla) ``` ``` r tabla_round <- round(tabla, 2) ```
--- ### Abriendo un archivo tipo tabla ``` r # Para abrir un archivo en formato csv: # el argumento dec determina el tipo de separador de decimales, y # el argumento sep el separador de columnas tabla_csv <- read.csv("C:/TuDirectorio/MET_CAUQUENES.csv", dec=".") # Para abrir un archivo en formato xls con libreria readxl library(readxl) tabla_excel <- read_excel("C:/TuDirectorio/MET_CAUQUENES.xls",sheet=1) ``` -- ``` r view(tabla_excel) ```
--- ### Manipulando una base de datos estilo tabla Las primeras manipulaciones consisten en: - Sustraer - Filtrar - Modificar o - Agregar Información nueva a nuestra base datos. --- ### Manipulando una base de datos estilo tabla -- **Sustraer** ``` r # Opción 1: por nombre de la columna sub_1 <- tabla_csv$PP # Opción 2: por posición de la columna sub_2 <- tabla_csv[,5] # Opción 3: por posición de la fila sub_3 <- tabla_csv[58,] ``` --- ### Manipulando una base de datos estilo tabla **Filtrar** ``` r # Opcion 1: por condición según columna filtro_1 <- tabla_csv[which(tabla_csv$Month == 3),] # Opción 2: usando función subset() filtro_2 <- subset(tabla_csv, Month == 8) # Opcion 3: usando la función filter() del paquete dplyr #install.package("dplyr") library(dplyr) filtro_3 <- filter(tabla_csv, Year == 2019) ``` --- **Modificar** ``` r # Opción 1: modificar una columna completa mod <- tabla_csv # con esto nos aseguramos de no cometer errores en la original mod$PP <- mod$PP / 1000 # para pasar de mm a cm3 # Opción 2: cambiar algunos elementos según condición mod[which(mod$Year < 1990), ] <- NA # NA es Not Available o sea sin dato mod <- na.omit(mod) # eliminamos las filas con NA's # se podrÃa haber llegado a este mismo resultado solo filtrando # ... y tantas otras opciones que se nos ocurran ``` **Agregar** ``` r mod$Amp <- mod$Tmax - mod$Tmin # creamos una nueva columna amp con la diferencia entre Tmin y Tmax ```
--- ### Manipulando una base de datos estilo tabla Combinemos estas acciones. Se requiere obtener el promedio anual de la temperatura mÃnima, media y máxima para el año 2010. -- ``` r # Filtramos nuestros datos al año 2010 filtro_2010 <- filter(tabla_csv, Year == 2010) ``` -- ``` r # Seleccionamos las columnas que necesitamos filtro_2010_temperatura <- filtro_2010[, c(5:7)] ``` -- ``` r # Usamos la función apply para aplicar una función a todas las columnas o filas temperatura_media_2010 <- apply(X = filtro_2010_temperatura, MARGIN = 2, FUN = mean) ``` ``` ## Tmin Tmed Tmax ## 6.713333 13.402500 20.092500 ``` --- ### Manipulando una base de datos estilo tabla Ahora ustedes: ¿Cuál es la temperatura mÃnima promedio para el mes de Abril? -- ``` r filtro_abril <- filter(tabla_csv, Month == 4)[, 5] mean(filtro_abril) ``` ``` ## [1] 7.270714 ``` --- ### Manipulando una base de datos estilo tabla Ahora ustedes: ¿Cuál es la máxima histórica y la amplitud máxima para el mes de Enero? -- ``` r tabla_csv$Amplitud <- tabla_csv$Tmax - tabla_csv$Tmin filtro_enero <- filter(tabla_csv, Month == 1) enero_historica <- apply(X = filtro_enero[, c(7, 8)], MARGIN = 2, FUN = max) ``` ``` ## Tmax Amplitud ## 29.69 16.48 ``` -- ¿Cuando ocurrió la máxima histórica? -- ``` r apply(X = filtro_enero[, c(7, 8)], MARGIN = 2, FUN = which.max) ``` ``` ## Tmax Amplitud ## 39 39 ``` --- ### Manipulando una base de datos estilo tabla ``` r filtro_enero[39, ] ```
--- ### Ciclos y Funciones sencillas Un **ciclo** es la repetición de "n veces" una misma rutina. El más conocido y ocupado es el ciclo for que se compone por: <center><img src="data:image/png;base64,#Loop.png" height="120px" /></center> En el ciclo representado la imagen de arriba, nos indica que el "Ãndice" **_i_** en nuestro primer ciclo tomará el valor del número 2, cuando termine ese ciclo, tomará el valor siguiente dentro del rango 2 a 11, es decir el número 3. Por ejemplo: ``` r for (i in 1:10) { print(9 * i) } ``` Significa que en el primer ciclo, imprimirá (print) el resultado de (9 x **_i_**), es decir (9 x **1**), en el segundo (9 x **2**) y siguiento hasta que **_i_** alcance el valor final de nuestro Ãndice, que en este caso es **10**. --- ### Ciclos y Funciones sencillas Crearemos un **ciclo** sencillo en dónde se repita un digitos tantas veces como valor lo indique. ``` r for (i in 2:8) { num <- rep(i, i) print(paste("REPITE ESTE NUMERO ", i, ", ", i, " VECES", sep = "")) print(num) } ``` --- ### Ciclos y Funciones sencillas Entonces el resultado de nuestro ciclo serÃa: ``` r for (i in 2:8) { num <- rep(i, i) print(paste("REPITE ESTE NUMERO ", i, ", ", i, " VECES", sep = "")) print(num) } ``` ``` ## [1] "REPITE ESTE NUMERO 2, 2 VECES" ## [1] 2 2 ## [1] "REPITE ESTE NUMERO 3, 3 VECES" ## [1] 3 3 3 ## [1] "REPITE ESTE NUMERO 4, 4 VECES" ## [1] 4 4 4 4 ## [1] "REPITE ESTE NUMERO 5, 5 VECES" ## [1] 5 5 5 5 5 ## [1] "REPITE ESTE NUMERO 6, 6 VECES" ## [1] 6 6 6 6 6 6 ## [1] "REPITE ESTE NUMERO 7, 7 VECES" ## [1] 7 7 7 7 7 7 7 ## [1] "REPITE ESTE NUMERO 8, 8 VECES" ## [1] 8 8 8 8 8 8 8 8 ``` --- ### Ciclos y Funciones sencillas Ahora, usaremos los condicionales if() y else() para que cada vez que encuentre una temperatura máxima superior a los 25° nos indique esta cara **(T.T)** y cuando sea menor **(n.n)** -- ``` r for (i in 1:nrow(mod)) { val <- mod$Tmax[i] if (val >= 25) { print("(T.T)") } else { print("(n.n)") } } ``` --- ### Ciclos y Funciones sencillas Ahora, veremos una situación un poco más complicada: .pull-left[ - Supongamos tenemos 10 archivos que contienen información de la temperatura media de algunas ciudades de la región del Maule, y queremos juntarlas en una. - Si nos fijamos, tenemos una columna con la fecha, el año, el mes y otra con el valor de la temperatura media, por lo que tenemos 4 columnas. - Debemos considerar para es ciclo o loop, el que todas las tablas tengan la misma estructura, misma cantidad filas o columnas (para no complejizar el ejercicio). ] -- .pull-right[ <img src="data:image/png;base64,#Tablas_loop.png" width="500px" align = "center"/> ] --- ### Ciclos y Funciones sencillas ``` r # Primero: crearemos un objeto indicando el directorio donde están nuestros archivos dir <- "C:/TuDirectorio/" # Segundo: crearemos un nuevo objeto con un enlistado de las direcciones para cada archivo ... vector_directorio <- list.files(path = dir, pattern = glob2rx("*.csv"), full.names = T) # glob2rx nos posibilita filtrar según un enunciado. # Tercero: abriremos la primera tabla en la que pegaremos la informacion de las siguientes tabla_meteo <- read.csv(vector_directorio[1]) # Tercero: preparamos nuestro ciclo for (i in 2:10) { # a) leemos nuestro archivo tabla_meteo_i <- read.csv(vector_directorio[i]) # b) pegamos la 4 columna de nuestro archivo usando la funcion cbind, # reemplazando la tabla original tabla_meteo <- cbind(tabla_meteo, tabla_meteo_i[, 4]) print(paste("LISTA TABLA N°", i, "DE 10", sep = " ")) } ``` --- ### Ciclos y Funciones sencillas ``` r view(tabla_meteo) ```
--- ### Ciclos y Funciones sencillas Ahora es importante cambiarle el nombre a nuestras columnas que quedaron sin nombre. Si nos fijamos en nuestro vector con las rutas a nuestros archivos, contienen los nombres de los puntos de temperatura: ``` r # dejamos el argumento full.names = F para que solo nos muestre el nombre del archivo # y no la ruta completa list.files(path = dir, pattern = glob2rx("*.csv"), full.names = F) ``` ``` ## [1] "Tmean_Cauquenes.csv" "Tmean_Chanco.csv" "Tmean_Constitucion.csv" ## [4] "Tmean_Curepto.csv" "Tmean_Curico.csv" "Tmean_Linares.csv" ## [7] "Tmean_LosRiscos.csv" "Tmean_Robleria.csv" "Tmean_Talca.csv" ## [10] "Tmean_Vichuquen.csv" ``` -- Veremos que hasta "Tmean_" todos los archivos comparten la misma ruta (directorio, carpeta) y comienzan con el mismo nombre. Dependiendo del nombre de cada archivo, cada vector que contiene la "ruta + nombre.csv", tiene una distinta cantidad de caracteres. --- ### Ciclos y Funciones sencillas Por ejemplo: "Tmean_Cauquenes.csv" tiene 19 caracteres y "T_meanLinares.csv" tiene 17. <center><img src="data:image/png;base64,#caracteres.png" height="150px" /></center> De esta forma, sabiendo que hay una constante entre el numero de caracteres antes del nombre (Tmean_), y la misma cantidad de caracteres de la extension (.csv) podemos extraer el nombre usando la funcion _substr()_ y _nchar_: **substr()** nos permite substraer parte de un vector de numérico o alfanumérico, indicando la posición, y **nchar()** nos indica el número de caracteres total de un posiciones de un vector, al cual le restaremos 4 que es la cantidad de posiciones que tiene la extensión del archivo (.csv). --- ### Ciclos y Funciones sencillas ``` r nombre_archivo <- list.files(path = dir, pattern = glob2rx("*.csv"), full.names = F) nombre_temperatura <- substr(x = nombre_archivo, start = 7, stop = nchar(nombre_archivo) - 4) print(nombre_temperatura) ``` ``` ## [1] "Cauquenes" "Chanco" "Constitucion" "Curepto" "Curico" ## [6] "Linares" "LosRiscos" "Robleria" "Talca" "Vichuquen" ``` -- La función **names()** nos permite ver los nombres de nuestra columnas (o variables, dependiendo de la clase del objeto). A su vez, nos permite renombrar las columnas de nuestro data frame (u otra clase de objeto), asignandole un vector que contega los nombres, para ello vamos a escribir: -- ``` r names(tabla_meteo) ``` ``` ## [1] "Date" "Year" "Month" ## [4] "Tmed" "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" ## [7] "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" ## [10] "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" "tabla_meteo_i[, 4]" ## [13] "tabla_meteo_i[, 4]" ``` ``` r names(tabla_meteo)[4:13] <- nombre_temperatura ``` --- ``` r view(tabla_meteo) ```
--- ### Guardar nuestra base de datos ``` r # Si queremos guardar nuestra tabla como un csv escribimos... write.csv(tabla_meteo, "C:/TuDirectorio/TuNombreDeArchivo.csv", row.names = F) # Si la queremos guardar como excel usamos la libreria xlsx # install.packages(writexl) writexl::write_xlsx(tabla_meteo, "C:/TuDirectorio/TuNombreDeArchivo.xlsx") ``` --- ### Ciclos y Funciones sencillas Crearemos una **función** que calcule grados Fahrenheit a partir de grados Celsius -- ``` r CaF <- function(C_temp) { (C_temp * 9 / 5) + 32 } ``` -- ``` r # Calculamos para un valor CaF(C_temp = 25) ``` ``` ## [1] 77 ``` ``` r # Calculamos para un vector numérico print(tabla_meteo$Cauquenes[1:10]) # revisamos los 10 primeros valores de Cauquenes ``` ``` ## [1] 19.66 19.09 17.43 14.65 12.18 8.54 9.69 11.00 10.51 12.94 ``` ``` r CaF(C_temp = tabla_meteo$Cauquenes)[1:10] ``` ``` ## [1] 67.388 66.362 63.374 58.370 53.924 47.372 49.442 51.800 50.918 55.292 ``` --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** simple ``` r cauquenes_2019 <- filter(tabla_meteo[, 1:4], Year == 2019) barplot(cauquenes_2019$Cauquenes) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-68-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** con color ``` r barplot(cauquenes_2019$Cauquenes, col = "red") ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-70-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** con color y lÃmite del eje Y definido ``` r barplot(cauquenes_2019$Cauquenes, col = "red", ylim = c(0, 25)) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-72-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** con color, lÃmite del eje Y definido y nombres de las barras ``` r barplot(cauquenes_2019$Cauquenes, col = "red", ylim = c(0, 25), names = month.abb) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-74-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Barras** con color, lÃmite del eje Y definido, nombres de las barras y nombres de ejes ``` r barplot(cauquenes_2019$Cauquenes, col = "red", ylim = c(0, 25), names = month.abb, ylab = "Temperatura (°C)", xlab = "Meses" ) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-76-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Puntos** simples ``` r tabla_meteo$Date <- as.Date(tabla_meteo$Date, format = "%Y-%m-%d") plot(x = tabla_meteo$Date, y = tabla_meteo$Cauquenes) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-78-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Puntos** con distintas formas y colores ``` r plot( x = tabla_meteo$Date, y = tabla_meteo$Cauquenes, pch = 8, col = "red", ylab = "Temperatura Media (C°)", xlab = "Años" ) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-80-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) <center><img src="data:image/png;base64,#Symbol.png" height="500px" /></center> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Lineas** ``` r #A diferencia con el plot anterior ya no usamos el argumento pch, y usamos type para indicar line plot( x = tabla_meteo$Date, y = tabla_meteo$Cauquenes, type = "l", col = "red", ylab = "Temperatura Media (C°)", xlab = "Años" ) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-82-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Gráfico de Lineas y puntos** ``` r plot( x = tabla_meteo$Date, y = tabla_meteo$Cauquenes, pch = 20, col = "brown", ylab = "Temperatura Media (C°)", xlab = "Años" ) # Para agregar las lineas sobre los puntos, usamos la funcion lines() lines(x = tabla_meteo$Date, y = tabla_meteo$Cauquenes, col = "red") ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-84-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Boxplot** ``` r boxplot(tabla_meteo$Cauquenes ~ tabla_meteo$Month, col = rainbow(12), names = c("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"), xlab = "Meses", ylab = "Temperatura Media (C°)" ) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-86-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Histograma** ``` r hist(tabla_meteo$Cauquenes, breaks = 50, col = "red", xlab = "Temperatura Media (C°)", ylab = "Frecuencia", main = "Histograma de Precipitaciones; breaks=50" ) ``` <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-88-1.png" width="100%" /> --- ### Visualización de nuestra información (Graficar/Plotear) **Histograma con boxplot** ``` r par(mfrow = c(2, 1)) # distribuimos el plot en 2 filas 1 columna par(mar = c(2, 2, 2, 2)) # incluimos 2 lineas de separación entre plots boxplot(tabla_meteo$Cauquenes, horizontal = T) hist(tabla_meteo$Cauquenes, breaks = 50, col = "red", main = "") ``` --- ### Visualización de nuestra información (Graficar/Plotear) **Histograma con boxplot** <img src="data:image/png;base64,#DIPGEOPR_01_1_files/figure-html/unnamed-chunk-90-1.png" width="100%" /> --- ### BibliografÃa 2011 Teetor Paul. _R Cookbook: Proven Recipes for Data Analysis, Statistics, and Graphics_. Versión en Linea por Chang Winston. <a href="http://www.cookbook-r.com/"> (Online) </a><br> 2015 McNeill Mhairi. _Base R (RStudio Cheatsheet)_. Disponible en Aula virtual. 2018 Mas, Jean-Francois. _Análisis espacial con R. Usa R como un Sistema de Información Geográfica_. European Scientific Institute, Republic of Macedonia. 2020 R. _The R Project for Statistical Computing_. <a href="https://www.r-project.org/"> (Online) </a><br> 2023 Randahl, David. _The R Researcher’s companion_. <a href="https://bookdown.org/david_randahl/r_book/"> (Online) </a><br> --- class: middle 